# python 常用结构数据类型:列表list、元组tuple、字典dict、集合set

# 1.列表list
# 列表特点:
# 1.列表用[]括住数据
# 2.列表内的数据允许重复
# 3.列表内的数据可以修改
# 4.列表允许用下标访问, 例如 l = list[1, 2, 3], l[0] = 1
# 5.列表支持加法和乘法运算
# 6.列表中可以有不同类型的成员
# 7.列表中的成员也可以是列表

# 例子:
l = []  # 表示创建一个空列表
l = [1, 2, 3]  # 创建一个有3个成员的列表
a = [1, 2]
b = [3, 4]

a = a+b  # a=[1, 2, 3, 4]
a = a*3  # a=[1, 2, 1, 2, 1, 2]

# 列表的方法:
# list.append(x)  # 列表的尾部追加成员x
# list.count(x)  # 返回x在列表list中出现的次数
# list.extend(b)  # 在列表list的后面追加列表b, 如列表的加法效果一样
# list.index(x)  # 返回x在列表中的位置, 如果有多个x, 则返回第一个x的位置
# list.insert(pos, data)  # 在列表list的pos位置插入成员data
# list.pop()  # 删除尾部的成员, 并返回该成员
# list.remove(x)  # 删除列表中的x成员, 若有多个, 则删除第一个, 若不存在, 则报错
# list.sort()  # 将列表中的成员进行排序, 前提是列表中的成员能排序
# list.reverse()  # 将列表中的成员进行顺序颠倒


# 2.元组tuple
# 元组特点:
# 1.元组内的成员用()括起来
# 2.元组跟列表不同的地方就是元组中的成员是不允许修改的, 包括修改成员位置也不可以, 所以排序是不行的
# 3.元组中也可以包含不同类型的成员。
# 4.元组也可以有相同的成员
# 5.元组也支持加法, 乘法
# 6.列表中的方法只要不是修改元组中的成员的, 都可以用
# 7.元组支持下标访问
# 8.元组中的成员也可以是元组

# 例子:
t = (1, )  # 创建一个只有一个成员的元组, 注意:创建只有一个成员的元组时, 后面必须加逗号
# t.sort()  # 报错, 元组不能被修改成员位置。


# 3.字典dict
# 字典特点:
# 1.字典的数据用{}括起来
# 2.字典中没位置可言, 不能用下标访问
# 3.字典的成员都是以key: value键值对的形式存在的
# 4.字典的成员可以重复, 但没有意义, key: value中的key也可以重复, 但是迭代字典时, 只会显示一个key:value
# 5.key最好不要重复
# 6.字典不支持加法乘法

# 例子:
d = {}  # 创建空字典
d = {'a': 1, 'b': 2, 'c': 3}  # 创建一个拥有3个成员的字典
val = d['a']  # 返回键值a对应的value

# 字典的方法:
# dic.clear()  # 清空字典
# dic.copy()  # 复制字典
# 给出键值key, 返回对应的数据, 如果没对应的key, 返回defaultkey, defaultkey是自己设定的, 也可以不写
# dic.get(key, defualtvalue)
# dic.items()  # 获得由键和值组成的迭代器（迭代器用于for...in迭代打印字典）
# dic.keys()  # 获得键key的迭代器
# dic.values()  # 获得值value的迭代器
# dic.pop(k)  # 删除对应的k:v键值对
# dic.popitem()  # 从字典中删除任意一个键值对, 并返回他

# 方法使用例子:
a = {'a': 1, 'b': 2, 'c': 3}
b = {}
b = a.copy()  # 把字典a复制给了字典b

a = {'a': 1, 'b': 2, 'c': 3}
for i in a.items():
    print(i)  # 将会打印出:('a',1)('b',2)('c',3)

a = {'a': 1, 'b': 2, 'c': 3}
for i in a.keys():
    print(i)  # 将会打印出:abc(a,b,c谁前谁后不一定)


# 4.集合set
# 概述:集合set是一个无序不重复的元素集合。若有重复则会抵消掉。
# 集合的特点:
# 1.集合支持并集, 交集, 差集运算
# 2.由于集合是无序的, 所以不能用下标访问
# 3.集合可以有重复的成员, 但迭代打印时, 只会打印一个, 所以最好不要有重复的成员

# 例子:
s = set()  # 创建一个空集合
s = set('python')  # 创建一个集合, 集合里有{'n','p','o','y','t','h'}
a = set("abcdefg")
b = set("defghijk")
c = a & b  # c为集合a和集合b的交集, c为{'d','e','f','g'}
c = a | b  # c为集合a和集合b的并集, c为{'f','g','h','i','e','j','k','a','b','c','d'}
c = a-b  # c为a和b的差集, c为{'a','c','b'}
print(a <= b)  # 判断是否a是b的子集
print(a >= b)  # 判断a是否包含b

# set一些方法:
# len(s)  # 返回集合s中的成员个数
# s.add(x)  # 添加一个成员
# s.update([1, 2, 3])  # 添加3个成员
# s.discard(x)  # 如果集合s中存在成员x, 则删除x
# s.clear()  # 删除集合中的所有成员
# s.pop()  # 删除任意一个成员, 并返回
# s.remove('x')  # 删除指定成员x
# c = s.copy()  # 复制集合s, 给集合c
